package cn.hill4j.tool.spring.ext.mvc.context;

import java.util.HashMap;
import java.util.Map;
/**
  * ClassName: DecRequestContext
  * Description: 解密上下文
  * @author hillchen
  * Date: 2023/8/13
  * @version: 1.0
  */
public class DecRequestContext {
    /**
     * 解密后请求参数
     */
    private Object[] desArgs;
    /**
     * 解密前请求参数
     */
    private Object[] reqArgs;
    /**
     * 请求参数映射map
     */
    private Map<ReqParamKey,String> midVal = new HashMap<>();
    /**
     * 是否需要重置body
     */
    private boolean bodyReset;
    /**
     * 是否需要重置请求参数
     */
    private boolean queryReset;
    /**
     * 是否所有请求参数都需要解密
     */
    private boolean allQueryDes;
    /**
     * 加密的响应结果
     */
    private Object encResult;
    /**
     * 业务响应结果
     */
    private Object reqResult;
    /**
     * 登录用户
     */
    private LoginUser loginUser;
    /**
     * 请求ip地址
     */
    private String reqIp;
    /**
     * 请求地址
     */
    private String url;
    /**
     * 请求异常
     */
    private Throwable reqException;
    /**
     * @author hillchen
     * Description: 获取解密后请求参数
     * Date: 2023/8/13 00:08
     * @return Object[]
     **/
    public Object[] getDesArgs() {
        return desArgs;
    }
    /**
     * @author hillchen
     * Description: 设置解密后请求参数
     * Date: 2023/8/13 00:09
     * @param desArgs 解密后请求参数
     **/
    public void setDesArgs(Object[] desArgs) {
        this.desArgs = desArgs;
    }

    /**
     * @author hillchen
     * Description: 获取解密前请求参数
     * Date: 2023/8/13 00:08
     * @return Object[]
     **/
    public Object[] getReqArgs() {
        return reqArgs;
    }

    /**
     * @author hillchen
     * Description: 设置解密前请求参数
     * Date: 2023/8/13 00:09
     * @param reqArgs 解密前请求参数
     **/
    public void setReqArgs(Object[] reqArgs) {
        this.reqArgs = reqArgs;
    }

    /**
     * @author hillchen
     * Description: 获取请求参数映射map
     * Date: 2023/8/13 00:08
     * @return Map
     **/
    public Map<ReqParamKey, String> getMidVal() {
        return midVal;
    }

    /**
     * @author hillchen
     * Description: 获取是否需要重置body
     * Date: 2023/8/13 00:08
     * @return boolean
     **/
    public boolean isBodyReset() {
        return bodyReset;
    }

    /**
     * @author hillchen
     * Description: 设置是否需要重置body
     * Date: 2023/8/13 00:09
     * @param bodyReset 是否需要重置body
     **/
    public void setBodyReset(boolean bodyReset) {
        this.bodyReset = bodyReset;
    }

    /**
     * @author hillchen
     * Description: 获取是否需要重置请求参数
     * Date: 2023/8/13 00:08
     * @return boolean
     **/
    public boolean isQueryReset() {
        return queryReset;
    }

    /**
     * @author hillchen
     * Description: 设置是否需要重置请求参数
     * Date: 2023/8/13 00:09
     * @param queryReset 是否需要重置请求参数
     **/
    public void setQueryReset(boolean queryReset) {
        this.queryReset = queryReset;
    }

    /**
     * @author hillchen
     * Description: 获取是否所有请求参数都需要解密
     * Date: 2023/8/13 00:08
     * @return boolean
     **/
    public boolean isAllQueryDes() {
        return allQueryDes;
    }

    /**
     * @author hillchen
     * Description: 设置是否所有请求参数都需要解密
     * Date: 2023/8/13 00:09
     * @param allQueryDes 是否所有请求参数都需要解密
     **/
    public void setAllQueryDes(boolean allQueryDes) {
        this.allQueryDes = allQueryDes;
    }

    /**
     * @author hillchen
     * Description: 获取业务响应结果
     * Date: 2023/8/13 00:08
     * @return Object
     **/
    public Object getReqResult() {
        return reqResult;
    }

    /**
     * @author hillchen
     * Description: 设置业务响应结果
     * Date: 2023/8/13 00:09
     * @param reqResult 业务响应结果
     **/
    public void setReqResult(Object reqResult) {
        this.reqResult = reqResult;
    }

    /**
     * @author hillchen
     * Description: 获取登录用户
     * Date: 2023/8/13 00:08
     * @return LoginUser
     **/
    public LoginUser getLoginUser() {
        return loginUser;
    }

    /**
     * @author hillchen
     * Description: 设置登录用户
     * Date: 2023/8/13 00:09
     * @param loginUser 登录用户
     **/
    public void setLoginUser(LoginUser loginUser) {
        this.loginUser = loginUser;
    }

    /**
     * @author hillchen
     * Description: 获取请求ip地址
     * Date: 2023/8/13 00:08
     * @return String
     **/
    public String getReqIp() {
        return reqIp;
    }

    /**
     * @author hillchen
     * Description: 设置请求ip地址
     * Date: 2023/8/13 00:09
     * @param reqIp 请求ip地址
     **/
    public void setReqIp(String reqIp) {
        this.reqIp = reqIp;
    }

    /**
     * @author hillchen
     * Description: 获取请求地址
     * Date: 2023/8/13 00:08
     * @return String
     **/
    public String getUrl() {
        return url;
    }

    /**
     * @author hillchen
     * Description: 设置请求地址
     * Date: 2023/8/13 00:09
     * @param url 请求地址
     **/
    public void setUrl(String url) {
        this.url = url;
    }

    /**
     * @author hillchen
     * Description: 获取请求异常
     * Date: 2023/8/13 00:08
     * @return Throwable
     **/
    public Throwable getReqException() {
        return reqException;
    }

    /**
     * @author hillchen
     * Description: 设置请求异常
     * Date: 2023/8/13 00:09
     * @param reqException 请求异常
     **/
    public void setReqException(Throwable reqException) {
        this.reqException = reqException;
    }

    /**
     * @author hillchen
     * Description: 获取加密的响应结果
     * Date: 2023/8/13 00:08
     * @return Object
     **/
    public Object getEncResult() {
        return encResult;
    }

    /**
     * @author hillchen
     * Description: 设置加密的响应结果
     * Date: 2023/8/13 00:09
     * @param encResult 加密的响应结果
     **/
    public void setEncResult(Object encResult) {
        this.encResult = encResult;
    }
    /**
     * @author hillchen
     * Description: 是否存在指定名称的请求参数
     * Date: 2023/8/13 00:15
     * @param name 请求参数名称
     * @return boolean
     **/
    public boolean hasResetQuery(String name){
        return getMidVal().containsKey(ReqParamKey.buildReqQueryKey(name));
    }
    /**
     * @author hillchen
     * Description: 获取重置的请求参数值
     * Date: 2023/8/13 00:08
     * @param name 请求参数名称
     * @return String
     **/
    public String getResetQuery(String name){
        return getMidVal().get(ReqParamKey.buildReqQueryKey(name));
    }
}
